// pages/memorandum/memorandum.js

//获取应用实例
const app = getApp()

Page({

	/**
	 * 页面的初始数据
	 */
	data: {
		//日期数组，每个元素都是一个对象，共有21个元素	{day: 10, month: 11, week: "二", year: 2020}
		dayList: [],
		// 一天的毫秒数
		millisecond: 86400000,
		// 生命周期函数中设置为 view7，用来控制 scroll-view 的滑动，滑动到指定项（该项的id和intoView的值相同）
		intoView: '',
		// 当前项的下标，初始值是7。从0开始，“今天”之前有7天，所以“今天”的下标是7
		currentIndex: 7,
		// 选中的日期(用户通过点击上面的按钮)
		selectedDay: {},
		// 滑动动画时长
		duration: 500,
		// swiper里面的数据,是一个对象数组。每一个元素都代表一条记录。 
		/*
			所有的代办事项，是一个数组，每一个元素依旧是一个数组。任何里面的每一个元素就是一个对象，代表一条代办记录
			{gmtCreate: 1605023745000, gmtModify: 1605023750000, id: 1, importance: 1, isFinished: 0,remark: "测试备注",timeFlag: 1 title: "微信小程序" uId: 1}
		*/
		targetList: [],
		// swiper的高度
		widHeight: 350,
		// 用户id，页面加载时从全局 globalData 中获取
		uid: "1",
		// // 完成按钮图标对应的 url： ../../icon/target.png   或者  ../../icon/target_ok.png
		// imageUrl: "",
		// iconClass: ""
	},

	// 中部 siwpper-item 的点击事件触发的函数。在标签上绑定了 “自定义属性 data-id，存放该条记录的 id”
	clickTargetItem: function (e) {
		console.log("clickItem");
		console.log(e.currentTarget.dataset);
		console.log("本条记录的id为：", e.currentTarget.dataset.id);
		console.log(this.data.targetList[this.data.currentIndex]);

		/*
			关于数据的传递：
				1. 可以将选择的 item 的 id 传入给下一个页面
				2. 将 “今天” 所有的代办事项传入
				3. 由于今天的代办事项是一个数组，且不能区分用户点击的 item 对应的数组下标，所以传入代办事项不能很好的解决问题
			解决办法：
				1. 传入 item 的 id
				2. 在下一个页面中根据 id 查询记录并显示（就多了一次查询数据库的操作）
		*/
		wx.navigateTo({
			url: '/pages/record/noteDetail/noteDetail',
			success: res => {
				// 通过eventChannel向被打开页面传送数据，将点击条目对应的 id 传过去
				res.eventChannel.emit('acceptDataFromOpenerPage', {
					data: e.currentTarget.dataset.id
				})
			}
		})


	},

	// 中部 swiper 滑动触发的点击事件
	siwperChange: function (e) {


		// console.log(e.detail);
		// 1. 设置 data 中的 index 的值，然后上面的日历部分的index也会改变。这样上面日历部分和下面的swipper部分就可以同步
		this.setData({
			"currentIndex": e.detail.current
		})

		// 2. 重新设置 siwper 的高度（先更改 currentIndex，然后在设置对应 siwper 的高度）
		// console.log("slide");
		// console.log(this.data.targetList);
		// console.log("currentIndex", this.data.currentIndex);
		// console.log(this.data.targetList[this.data.currentIndex].length);
		// console.log("myheight", myHeight);

		var myHeight = this.data.targetList[this.data.currentIndex].length * 135 + 3 * 70 + 176 + 100;


		wx.getSystemInfo({
			success: (result) => {
				console.log("页面高度", result.screenHeight);
				if (myHeight < result.screenHeight) {
					myHeight = result.screenHeight;
				}
			},
		});

		// 设置页面高度和当前选择的日期
		this.setData({
			'widHeight': myHeight,
			"selectedDay": this.data.dayList[e.detail.current]
		})

	},

	// 删除一个 “待办事项”
	deleteItem: function (e) {
		e.currentTarget.dataset;
		console.log("delete", e.currentTarget.dataset);

		wx.showModal({
			title: '提示',
			content: '确定要删除这条代办事项吗？',
			success: res => {
				if (res.confirm) {
					console.log('用户点击确定')

					wx.request({
						url: app.globalData.url + 'wx/deleteTarget',
						method: "GET",
						data: {
							"id": e.currentTarget.dataset.id
						},
						success: res => {
							wx.showToast({
								title: '删除成功',
								icon: 'success',
								duration: 1500
							});

							// 重新加载数据
							this.loadingData();


						}
					})

				} else if (res.cancel) {
					console.log('用户点击取消')
				}
			}
		})
	},

	// 点击日历上面的日期
	clickDate: function (event) {
		console.log(event.currentTarget.dataset);

		// 设置数组下标
		this.setData({
			'intoView': "view" + event.currentTarget.dataset.index,
			'currentIndex': event.currentTarget.dataset.index
		})

		// 更改用户选中的日期，然后在页面中渲染选中的日期
		this.setData({
			"selectedDay": this.data.dayList[event.currentTarget.dataset.index]
		})
	},

	// “回到今天” 按钮对应的点击事件
	returnToday: function () {
		console.log("回到今天");
		this.setData({
			"intoView": "view7",
			"currentIndex": 7,
			"selectedDay": this.data.dayList[7]
		})
	},

	// 封装的 js 函数，生成一个 dayList，里面有最近3个礼拜的日期信息
	weekDate: function () {

		var dayList = [];

		// 获取当前时间对应的 date 对象
		var myDate = new Date();

		// 因为要最近3个礼拜的日期信息，可能涉及到月份的变化所以不能简单的对天数加1或者减1，可以先计算出毫秒数，然后转换为日期
		var millisecond = myDate.getTime();

		// 为 "上一个礼拜的时间" 加入 dayList 中
		for (var i = 7; i > 0; i--) {
			// 根据毫秒数构造一个 Date 对象
			var tempDate = new Date(millisecond - i * this.data.millisecond);

			dayList.push({
				'day': tempDate.getDate(),
				'month': tempDate.getMonth() + 1,
				'week': this.toWeekDay(tempDate.getDay()),
				'year': tempDate.getFullYear()
			});
		}

		// 将 “今天” 加入 dayList 中
		dayList.push({
			'day': myDate.getDate(),
			'month': myDate.getMonth() + 1,
			'week': this.toWeekDay(myDate.getDay()),
			'year': myDate.getFullYear()
		})


		// 将 “未来2周” 加入 dayList 中
		for (var i = 1; i <= 13; i++) {
			var tempDate = new Date(millisecond + i * this.data.millisecond);
			dayList.push({
				'day': tempDate.getDate(),
				'month': tempDate.getMonth() + 1,
				'week': this.toWeekDay(tempDate.getDay()),
				'year': tempDate.getFullYear()
			})
		}

		return dayList;
	},

	// 传入数据  讲一周的某一天返回成中文状态下的字符
	toWeekDay: function (weekDay) {
		switch (weekDay) {
			case 1: return '一'; break;
			case 2: return '二'; break;
			case 3: return '三'; break;
			case 4: return '四'; break;
			case 5: return '五'; break;
			case 6: return '六'; break;
			case 0: return '日'; break;
			default: break;
		}
		return '传入未知参数';
	},

	// 添加 “代办事项”
	addNote(e) {
		console.log("addNote");

		// 保留当前页面，跳转到应用内的某个页面。但是不能跳到 tabbar 页面。
		wx.navigateTo({
			url: '/pages/record/addNote/addNote',
		})

	},

	/**
	 * 生命周期函数--监听页面加载
	 */
	onLoad: function (options) {

		// 加载数据，调用封装的方法
		this.loadingData();

	},

	// 生命周期函数：用户下拉刷新
	onPullDownRefresh: function () {
		console.log("refresh");

		// 加载数据，调用封装的方法
		this.loadingData();
	},

	// 封装出来的加载数据的函数
	loadingData: function () {
		wx.showLoading({
			title: '加载中',
		})

		// 1. 获取最近3周的日期信息，存入 this.data 中
		var dayList = this.weekDate();
		// 通过 scroll-into-view 设置一开始的位置
		this.setData({
			"dayList": dayList,
			"intoView": "view7"
		});

		// 1.1 设置当前选中的日期
		this.setData({
			"selectedDay": this.data.dayList[7]
		})


		// 2. 从 globalData 中获取用户id
		var app = getApp();
		this.setData({
			"uid": app.globalData.myUserInfo.id
		})

		// 2. 获取代办事项信息，根据用户id获取
		// 向后端服务器发送请求
		// 将当前的日期发送给后端服务器
		var myDate = new Date();
		var millisecond = myDate.getTime();

		wx.request({
			url: app.globalData.url + 'wx/getTargetByUserId',
			method: "GET",
			data: {
				"uid": this.data.uid,
				"millisecond": millisecond
			},
			success: res => {
				console.log("请求成功！")
				console.log(res);

				// 设置待办事项，同时设置 swiper 的高度
				// “今天” 对应的 swiper-item 下标是7，所以选择数组第7个元素
				var myHeight = res.data[7].length * 135 + 3 * 70 + 176 + 100;
				console.log("今天的代办事项有:", res.data[7].length)
				console.log("myheight", myHeight);

				// 为了让 swiper 能够覆盖整个页面（只有这样，按住其他地方进行滑动时，也可以成功的滑动 siwpper）
				/*
					判断 myHeight 的高度
					为了让 swiper 能够覆盖整个页面（只有这样，按住其他地方进行滑动时，也可以成功的滑动 siwpper）
				*/
				wx.getSystemInfo({
					success: (result) => {
						console.log("页面高度", result.screenHeight);
						if (myHeight < result.screenHeight) {
							myHeight = result.screenHeight;
						}
					},
				})

				this.setData({
					'targetList': res.data,
					'widHeight': myHeight
				})

				// 隐藏提示框
				wx.hideLoading();

				// 停止下拉刷新
				wx.stopPullDownRefresh()
			}
		})
	},


	scroll: function () {

	}
})